package fiuba.algo3.algoThieft.modelo;

import org.w3c.dom.Element;
import org.w3c.dom.Node;



public class Lugar {
    //Duraciones en horas
    private static final int DURACION_PRIMER_VISITA = 1;
    private static final int DURACION_SEGUNDA_VISITA = 2;
    private static final int DURACION_VISITA_LUEGO_DE_SEGUNDA = 3;
    private int cantidadVisitas;
    private Pista pistaFacil;
    private Pista pistaMedia;
    private Pista pistaDificil;
    private String nombre;
	private Malviviente malvivienteEscondido;
        
    //este metodo quizas sea solo temporal
    public Lugar(){
	this.pistaFacil = new PistaFacil();
    this.pistaMedia = new PistaMedia();
    this.pistaDificil = new PistaDificil();
    this.cantidadVisitas = 0;
    }
    
	public Pista getPistaFacil() {
		return this.pistaFacil;
	}
	
	public Pista getPistaMedia (){
		return this.pistaMedia;
	}
	
	public Pista getPistaDificil (){
		return this.pistaDificil;
	}
        
    public Pista getPista(Novato rango){
        this.cantidadVisitas += 1;
        return this.getPistaFacil();
    }
    
    public Pista getPista(Detective rango){
        this.cantidadVisitas += 1;
        return this.getPistaFacil();
    }
    
    public Pista getPista(Investigador rango){
        this.cantidadVisitas += 1;
        return this.getPistaMedia();
    }
    
    public Pista getPista(Sargento rango){
        this.cantidadVisitas += 1;
        return this.getPistaDificil();
    }

    public int duracionDeVisita() {
        if (this.cantidadVisitas == 0){ 
            return DURACION_PRIMER_VISITA;
        }
        if (this.cantidadVisitas == 1 ){
            return DURACION_SEGUNDA_VISITA;
        }
        return DURACION_VISITA_LUEGO_DE_SEGUNDA;
    }

    public String getNombre() {
        return this.nombre;
    }

    public static Lugar crearLugar(Node nodo) {
        Lugar lugar = new Lugar();
        Element elementoLugar = (Element) nodo;
        lugar.nombre = elementoLugar.getAttribute("nombre");
        lugar.pistaFacil = PistaFacil.crearPista(elementoLugar.getChildNodes().item(0));
        lugar.pistaMedia= PistaMedia.crearPista(elementoLugar.getChildNodes().item(1));
        lugar.pistaDificil= PistaDificil.crearPista(elementoLugar.getChildNodes().item(2));
        lugar.cantidadVisitas = 0;
        return lugar;
    }
    
    public boolean hayAlguienEscondido() {
		return this.malvivienteEscondido!=null;
	}


	public void esconder(Malviviente malviviente) {

		this.malvivienteEscondido = malviviente;
		Pista pista = malviviente.rastroAlEsconderse();
		this.pistaDificil = pista;
		this.pistaMedia = pista;
		this.pistaFacil = pista;
			
	}


	public void interactuarConResidente(Juego juego) {
		this.malvivienteEscondido.interactuarConVisitante(juego);
		
	}


	public void guardarCaracteristica(Caracteristica caracteristica) {
		
		this.pistaFacil.guardarCaracteristica(caracteristica);
		this.pistaMedia.guardarCaracteristica(caracteristica);
		this.pistaDificil.guardarCaracteristica(caracteristica);
		
	}


	public void guardarPistasDe(Lugar otroLugar) {
		this.pistaFacil = otroLugar.getPistaFacil();
		this.pistaMedia = otroLugar.getPistaMedia();
		this.pistaDificil = otroLugar.getPistaDificil();
	}

	public void desconocerLadron() {
		this.pistaFacil = new PistaLadronDesconocido();
		this.pistaMedia = new PistaLadronDesconocido();
		this.pistaDificil = new PistaLadronDesconocido();
	}

}